package object;

public class ObjectDemo {
    public static void main(String[] args) {
        /*
            输出引用变量 是默认调用Object类的toString()方法
            该方法返回的字符串格式为:类的全称@hashcode值
            但通常这个返回结果对我们开发是没有意义的
            我们真正想要输出的是对象的属性值
            我们认为Object类的toString()并不能满足需求
            因此我们常常重写toString()来返回具体额属性值
         */
        /*
        Point p = new Point(100,200);
        System.out.println(p);//相当于p.toString
        System.out.println(p.toString());
         */

        /*
            调用Object类的equals(),内部还是在使用==来比较地址,没有参考意义
            若想比较对象的属性值是否相同,我们认为Object类的equals()并不能满足需求
            因此常常需要重写equals()
         */
        /*
        Point p1 = new Point(100,200);
        Point p2 = new Point(100,200);
        System.out.println(p1==p2);//==比较的是地址,
                                   // p1和p2地址不同所以输出 false

        System.out.println(p1.equals(p2));//需要重写equals()才是比较属性值
         */

        String s1 = new String("hello");
        String s2 = new String("hello");
        //String类重写了equals()来比较字符串内容是否相同
        System.out.println(s1.equals(s2));//true

        StringBuilder builder1 = new StringBuilder("hello");
        StringBuilder builder2 = new StringBuilder("hello");
        //StringBuilder类没有重写equals(),因此调用的还是Object类的equals()来比较地址
        System.out.println(builder1.equals(builder2));//false

        System.out.println(s1.equals(builder1));//false,因为类型不同




    }
}
